#include <iostream>

class Test
{
public:
    // 类内留下声明
    Test()
    {
        std::cout<<"无参构造!\n";
    }

    Test(const Test& t)
    {
       std::cout<<"拷贝构造!\n"; 
    } 
    ~Test()
    {
        std::cout<<"析构函数!\n"; 
    }
};
//RVO优化: return value optimizer : 返回值优化
//当返回一个右值对象时，外部对象不会进行拷贝
//而是直接拿走右值的对象资源
//形参不在RVO优化内
// Test func()
// {
//     Test t;
//     return t; //将亡值
// }

// Test func(Test& t)
// {
//     return t; //将亡值
// }

Test func(Test t)
{
    return t; //将亡值
}
int main()
{
    //匿名对象 : 生命周期只有一行
    Test();
    // 右值 : 将亡值 : 即将要释放的对象
    // 可以直接夺取右值的对象资源 
    // Test t = Test();
    // while(1);

    // Test t;         //无参构造
    // Test t1(t);     //拷贝构造!
    // Test t3 = t;    //拷贝构造!   左值拷贝
    // Test t2 = Test();//无参构造!  右值不拷贝
    // Test t;
    // Test t1 = func(t);

    return 0;
}


